wayland: Add support for set_shadow_width
authorJasper St. Pierre <jstpierre@mecheye.net>
Fri, 7 Feb 2014 22:20:14 +0000 (17:20 -0500)
committerJasper St. Pierre <jstpierre@mecheye.net>
Sat, 8 Feb 2014 00:33:17 +0000 (19:33 -0500)
gdk/wayland/gdkwindow-wayland.c
gdk/wayland/protocol/xdg-shell.xml

index 6d80527c34d15a49a9695e2c0af57f3befc9dd14..ab5953f3208b63bd9aaea66fd5845c80a0c278ac 100644 (file)
@@ -2148,6 +2148,23 @@ gdk_wayland_window_set_opaque_region (GdkWindow      *window,
     wl_region_destroy (wl_region);
 }
 
+static void
+gdk_wayland_window_set_shadow_width (GdkWindow *window,
+                                     int        left,
+                                     int        right,
+                                     int        top,
+                                     int        bottom)
+{
+  GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
+  if (!impl->xdg_surface)
+    return;
+
+  xdg_surface_set_margin (impl->xdg_surface, left, right, top, bottom);
+}
 
 static void
 _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass)
@@ -2238,9 +2255,9 @@ _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass)
   impl_class->delete_property = gdk_wayland_window_delete_property;
   impl_class->get_scale_factor = gdk_wayland_window_get_scale_factor;
   impl_class->set_opaque_region = gdk_wayland_window_set_opaque_region;
+  impl_class->set_shadow_width = gdk_wayland_window_set_shadow_width;
 }
 
-
 void
 _gdk_wayland_window_set_device_grabbed (GdkWindow      *window,
                                         GdkDevice      *device,
index 5c21f4ebc9933aa4a6f19e01f71ae07e2b3e9aae..f0d04aa34a2587b925f200f271954a28122866f1 100644 (file)
       <arg name="parent" type="object" interface="wl_surface" allow-null="true"/>
     </request>
 
+    <request name="set_margin">
+      <description summary="set the visible frame boundaries">
+        This tells the compositor what the visible size of the window
+        should be, so it can use it to determine what borders to use for
+        constrainment and alignment.
+
+        CSD often has invisible areas for decoration purposes, like drop
+        shadows. These "shadow" drawings need to be subtracted out of the
+        normal boundaries of the window when computing where to place
+        windows (e.g. to set this window so it's centered on top of another,
+        or to put it to the left or right of the screen.)
+
+        This value should change as little as possible at runtime, to
+        prevent flicker.
+
+        This value is also ignored when the window is maximized or
+        fullscreen, and assumed to be 0.
+
+        If never called, this value is assumed to be 0.
+      </description>
+      <arg name="left_margin" type="int"/>
+      <arg name="right_margin" type="int"/>
+      <arg name="top_margin" type="int"/>
+      <arg name="bottom_margin" type="int"/>
+    </request>
+
     <request name="set_title">
       <description summary="set surface title">
        Set a short title for the surface.